﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Business.Entities;

namespace Data.DataBase
{
    public class DocenteCursoAdapter : Data.Database.Adapter
    {
        private static List<DocenteCurso> _DocenteCursos;

        public static List<DocenteCurso> DocenteCursos
        {
            get
            {
                if (_DocenteCursos == null)
                {
                    _DocenteCursos = new List<DocenteCurso>();
                    DocenteCurso dc;

                    dc = new DocenteCurso();
                    dc.Id = 1;
                    dc.IdDocente = 2;
                    dc.IdCurso = 1;
                    dc.Cargo = DocenteCurso.tiposCargo.Docente;
                    dc.State = BusinessEntity.States.Unmodified;

                    _DocenteCursos.Add(dc);

                    dc = new DocenteCurso();
                    dc.Id = 2;
                    dc.IdDocente = 2;
                    dc.IdCurso = 1;
                    dc.Cargo = DocenteCurso.tiposCargo.Docente;
                    dc.State = BusinessEntity.States.Unmodified;

                    _DocenteCursos.Add(dc);
                }
                return DocenteCursoAdapter._DocenteCursos;
            }
           
        }

        public Business.Entities.DocenteCurso GetOne(int id)
        {
            return DocenteCursos.Find(delegate(Business.Entities.DocenteCurso dc) { return dc.Id == id; });
        }

        public List<Business.Entities.DocenteCurso> GetAll()
        {
            return new List<DocenteCurso>(DocenteCursos);
        }

        public void Save(Business.Entities.DocenteCurso docenteCurso)
        {
            switch (docenteCurso.State)
            {
                case BusinessEntity.States.New:
                    int nuevoId = 0;
                    // esta busqueda podria reemplazarse por un OrderBy que orden por ID.
                    foreach (DocenteCurso dc in DocenteCursos)
                    {
                        if (dc.Id > nuevoId)
                        {
                            nuevoId = dc.Id;
                        }
                    }
                    docenteCurso.Id = nuevoId + 1;
                    DocenteCursos.Add(docenteCurso);
                    break;
                case BusinessEntity.States.Modified:
                    DocenteCursos[DocenteCursos.FindIndex(delegate(DocenteCurso dc) { return dc.Id == docenteCurso.Id; })] = docenteCurso;
                    break;
                case BusinessEntity.States.Deleted:
                    this.Delete(docenteCurso);
                    break;
            }
            docenteCurso.State = BusinessEntity.States.Unmodified;            
        }

        public void Delete(int id)
        {
            this.Delete(this.GetOne(id));
        }

        public void Delete(Business.Entities.DocenteCurso docenteCurso)
        {
            DocenteCursos.Remove(docenteCurso);
        }

    }
}
